【Unity】判断物体(四边形)是否在相机的可视范围内 您所在的位置:网站首页 unity 物体是否显示 【Unity】判断物体(四边形)是否在相机的可视范围内

【Unity】判断物体(四边形)是否在相机的可视范围内

2023-12-11 06:55| 来源: 网络整理| 查看: 265

在这里插入图片描述

一、Unity的MonoBehaviour方法

MonoBehaviour.OnBecameVisible() 在渲染器变为对任意摄像机可见时调用。 MonoBehaviour.OnBecameInvisible()在渲染器对任何摄像机都不可见时调用。

public class ExampleClass : MonoBehaviour { void OnBecameInvisible() { enabled = false; } void OnBecameVisible() { enabled = true; } }

优点:可以很方便的得到物体对于相机可见和不可见的调用。

缺点:这个调用是不可控的,无法主动触发结果,而且OnBecameVisible只在物体进入相机可视范围内时触发一次,同样的OnBecameVisible只在物体退出相机可视范围内时触发一次。

自定义方法

下面的运算,都将坐标转换为屏幕坐标来运算。 相机可视范围的矩形为(0,0)(0,1)(1,0)(1,1) 为了方便说明,将相机可视范围的矩形称为矩形A,将需要计算的面称为平面B。

条件1:如果则平面B的某一个顶点在矩形A中,则平面B和矩形A一定相交。 条件2:如果则矩形A的某一个顶点在平面B中,则平面B和矩形A一定相交。 在这里插入图片描述

1.使用条件1, 得到一定相交的情况。

因为判断点是否在矩形内的算法耗时很少,所以我们直接使用。

private bool IsPosListInRectangle(Vector2[] posList, Vector2 leftDown, Vector2 rightTop) { foreach (var pos in posList) { if (pos.x >= leftDown.x & pos.x = leftDown.y & pos.y < rightTop.y) { return true; } } return false; }

传入平面B的四点数组,和矩形A的左下角点,和右上角点。 如果结果为true,平面B和矩形A一定相交。 如果结果为false,平面b的所有顶点一定不再矩形A内。

2.修改条件2,得到一定不相交的情况。

因为判断点在矩形的算法很简单,耗时很少,所以在1中我们直接使用了。 但条件2是要判断点在四边形中。 所以我们计算四边形的外包围矩形,使用四顶点中最小的x,y和最大的x,y即可。 改为判断矩形B的四个顶点,是否在平面A的外包围矩形中。 在这里插入图片描述

但如果是这种情况,矩形B右下角顶点,在平面B外包围矩形内,两平面不相交。 在这里插入图片描述

所以我们反过来,判断矩形B和平面A的外包围矩形是否相交,得到一定不相交的情况

两个矩形如果不相交,那么矩形B和平面A也一定不相交。

参考:两矩形相交的判定https://blog.csdn.net/qq_41220023/article/details/79748493 直接判定两个矩形的中心距离,然后判断其是否皆小于两矩形长的和的一半 和 宽的和的一半. 如果中心距离的x,小于量矩形长度和的一半,并且中心距离的y,小于量矩形长度和的一半,则两矩形一定相交。 在这里插入图片描述

private bool IsRectangleIntersection(Vector2 rectLeftDown0, Vector2 rectRightTop0, Vector2 rectLeftDown1, Vector2 rectRightTop1) { float rectCenterX0 = (rectRightTop0.x + rectLeftDown0.x) / 2; float rectCenterY0 = (rectRightTop0.y + rectLeftDown0.y) / 2; float rectCenterX1 = (rectRightTop1.x + rectLeftDown1.x) / 2; float rectCenterY1 = (rectRightTop1.y + rectLeftDown1.y) / 2; float centerDistanceX = Math.Abs(rectCenterX1 - rectCenterX0); float centerDistanceY = Math.Abs(rectCenterY1 - rectCenterY0); if (centerDistanceX * 2


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有